export default {
  // 为当前模块开启命名空间
  namespaced: true,
  // 模块的 state 数据
  state: () => ({
        // 购物车的数组，用来存储购物车中每个商品的信息对象
        // 每个商品的信息对象，都包含如下 6 个属性：
        // { goods_id, goods_name, goods_price, goods_count, goods_small_logo, goods_state }  
        cart: JSON.parse(uni.getStorageSync("cart") || "[]")
  }),   
  // 模块的 mutations 方法,用于定义修改state中的数据的方法
  mutations: { 
    // 1. 添加商品到购物车
    addToCart(state,goods){
      // 1.1 首先,判断在购物车中是否存在此商品
      const findResult = state.cart.find(x => x.goods_id === goods.goods_id)
      console.log(findResult)
      // 1.2 如果不存在就添加到购物车中
      if (!findResult){
        state.cart.push(goods)
      }else{ //1.3 如果存在此商品就修改数量
        findResult.goods_count++
      }
      console.log(state.cart)
      // 1.3 保存完购物车后,立即进行持久化到本地,使用命名空间的方法保存
      this.commit("m_cart/saveToStorage")
    },
    // 2. 保存购物车到localStorage中
    saveToStorage(state){
      uni.setStorageSync("cart",JSON.stringify(state.cart))
    },
    // 3. 修改商品选中状态，true: 代表选中 false：代表未选中
    updateStatus(state,goods){
      // 3.1 在cart数组中根据传入的商品id查询商品
      const findResult = state.cart.find(x => x.goods_id === goods.goods_id)
      // 3.2 如果有此商品,则修改购物车列表中其状态或传入商品状态
      if(findResult){
        findResult.goods_state = goods.goods_state
      }
      console.log(findResult)
      // 3.3 最后,持久化到本地
      this.commit("m_cart/saveToStorage")
    },
    // 4. 保存修改数量到本地localStorage
    updateGoodsCount(state,goods){
      const findResult = state.cart.find(x => x.goods_id === goods.goods_id)
      if(findResult){
        findResult.goods_count = goods.goods_count
        this.commit("m_cart/saveToStorage")
      }
    },   
    // 5. 从购物车删除商品
    removeCartByGoodsId(state,goods){
      state.cart = state.cart.filter(x => x.goods_id != goods.goods_id)
      this.commit("m_cart/saveToStorage")
    },
    // 6. 设置所有商品的选中或未选中状态
    updateAllGoodsState(state,newState){
      // 循环修改状态值为指定的状态值(而指定的状态值就是我们点击后的状态)
      state.cart.forEach(x => x.goods_state = newState)
      this.commit("m_cart/saveToStorage")
    }
    
  },
   // 模块的 getters 属性
  getters:{
    // 1. 计算商品数量
    total(state){
      let count = 0   // 商品总数
      state.cart.forEach( f => count += f.goods_count)
      return count
    },
    // 2. 获取选中商品的总数量
    checkedCount(state){
      return state.cart.filter(x => x.goods_state).reduce((total,item) => total + item.goods_count,0)
    },
    // 3. 计算总价格
    checkedGoodsAmount (state){
      return state.cart.filter(x => x.goods_state)
      .reduce((total,item) => total += item.goods_price * item.goods_count,0)
      .toFixed(2)
    }
  }
}